/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package conection;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author javi
 */
public class Cliente implements Runnable {

    Socket socketCliente;
    DataInputStream entradaCliente;
    DataOutputStream salidaCliente;
    BufferedReader entradaTeclado;
    Thread hiloEscuchaMensajesEntrantes;
    Runnable escuchadorMensajesEntrantes;

    public Cliente(String host, int port) throws UnknownHostException, IOException {
        socketCliente = new Socket(host, port);
        entradaCliente = new DataInputStream(socketCliente.getInputStream());
        salidaCliente = new DataOutputStream(socketCliente.getOutputStream());
        entradaTeclado = new BufferedReader(new InputStreamReader(System.in));
    }

    public void logIn() throws IOException, InterruptedException {
        String mensajeLogin = entradaCliente.readUTF();
        System.out.print(mensajeLogin);
        salidaCliente.writeUTF(entradaTeclado.readLine());
        salidaCliente.flush();
        escuchadorMensajesEntrantes = new Runnable() {

            @Override
            public void run() {
                while(socketCliente.isConnected() &&  entradaCliente != null)
                    try {
                        System.out.println(entradaCliente.readUTF());
                    
                } catch (IOException ex) {
                    Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };
        hiloEscuchaMensajesEntrantes = new Thread(escuchadorMensajesEntrantes);
        String respuestaLogin = entradaCliente.readUTF();
        if (compruebaRespuestaServidor(respuestaLogin)) {
            System.out.println("Comenzando chat...");
            comienzaChat();
            
        } else {
            System.err.println("NOMBRE YA OCUPADO.Arranque de nuevo la aplicación y pruebe otro nombre...");
        }

    }

    public boolean compruebaRespuestaServidor(String respuestaLogin) {
        switch (respuestaLogin) {
            case "log|0":
                return false;
            case "log|1":
                return true;
            default:
                return false;
        }
    }

    private void comienzaChat() throws IOException, InterruptedException {
        hiloEscuchaMensajesEntrantes.start();
        
        String mensajeEnviar;
        do{
        //System.out.print("Mensaje: ");
        mensajeEnviar = entradaTeclado.readLine();
        salidaCliente.writeUTF(mensajeEnviar);
        salidaCliente.flush();
        }while(!mensajeEnviar.equals("exit"));
        System.exit(0);
    }

    @Override
    public void run() {
        try {
            logIn();
        } catch (IOException | InterruptedException ex) {
            Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}
